"""
应用配置
"""
import os
from pathlib import Path
from dotenv import load_dotenv

# 尝试加载.env文件中的环境变量
load_dotenv()

class Config:
    """基本配置类"""
    # 应用基本配置
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'dev-key-please-change-in-production'
    DEBUG = os.environ.get('FLASK_DEBUG', 'True').lower() in ('true', '1', 't')

    # 数据库配置
    DATABASE_URI = os.environ.get('DATABASE_URI') or 'sqlite:///app.db'

    # API配置
    API_PREFIX = '/api'

    # 跨域配置
    CORS_ORIGINS = os.environ.get('CORS_ORIGINS', '*')

    # JWT配置
    JWT_SECRET_KEY = os.environ.get('JWT_SECRET_KEY') or SECRET_KEY
    JWT_ACCESS_TOKEN_EXPIRES = 60 * 60  # 1小时
    JWT_REFRESH_TOKEN_EXPIRES = 30 * 24 * 60 * 60  # 30天
    JWT_TOKEN_LOCATION = ['headers']
    JWT_HEADER_NAME = 'Authorization'
    JWT_HEADER_TYPE = 'Bearer'

class DevelopmentConfig(Config):
    """开发环境配置"""
    DEBUG = True

class ProductionConfig(Config):
    """生产环境配置"""
    DEBUG = False

    # 在生产环境中，SECRET_KEY必须设置
    @classmethod
    def init_app(cls, app):
        Config.init_app(app)

        # 确保SECRET_KEY已设置
        assert os.environ.get('SECRET_KEY'), 'SECRET_KEY环境变量未设置'

# 根据环境变量选择配置
config = {
    'development': DevelopmentConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}

# 默认使用开发配置
Config = config[os.environ.get('FLASK_ENV', 'default')]
